package cn.jinbyte.core.model;

import cn.jinbyte.core.helper.ApiCodeCache;
import cn.jinbyte.core.helper.SpringContextHelper;
import com.fasterxml.jackson.annotation.JsonValue;
import org.apache.commons.lang3.StringUtils;

/**
 * 接口状态码
 */
public enum ApiCode {
    /**
     * 成功
     */
    OK(0),

    /**
     * 系统错误
     */
    ERROR(-10),

    /**
     * 业务错误
     */
    BS_ERROR(-20),

    /**
     * 业务错误-参数错误
     */
    BE_400(-20),

    /**
     * 业务错误-未授权
     */
    BE_401(-30),

    /**
     * 业务错误-权限错误
     */
    BE_403(-40),

    /**
     * 业务错误-未找到数据
     */
    BE_404(-20),

    /**
     * 业务错误-手机号已存在
     */
    BE_PHONE_EXIST(-50),

    /**
     * 业务错误-用户名已存在
     */
    BE_USERNAME_EXIST(-50),

    /**
     * 业务错误-验证码无效
     */
    BE_CAPTCHA_INVALID(-60),
    /**
     * 业务错误-验证码已过期
     */
    BE_CAPTCHA_EXPIRED(-61),
    /**
     * 业务错误-验证码错误
     */
    BE_CAPTCHA_ERROR(-62),

    ;

    ApiCode(int code) {
        this.code = code;
    }

    /**
     * 默认错误码
     */
    @JsonValue
    private final int code;

    @JsonValue
    public int apiCode() {
        if (code == 0) {
            return code;
        }
        ApiCodeCache apiCodeCache = SpringContextHelper.getBean(ApiCodeCache.class);
        Integer cacheCode = apiCodeCache.getCode(this.name());
        if (cacheCode != null) {
            return cacheCode;
        }
        return code;

    }

    public String getDescription() {
        ApiCodeCache dictCache = SpringContextHelper.getBean(ApiCodeCache.class);
        String description = dictCache.getDescription(this.name());
        if (StringUtils.isNotBlank(description)) {
            return description;
        }
        return "系统错误";
    }

}
